$.fn.dataTableExt.oApi.fnReloadAjax = function ( oSettings, sNewSource, fnCallback, bStandingRedraw )
    {
        if ( typeof sNewSource != 'undefined' && sNewSource != null )
        {
            oSettings.sAjaxSource = sNewSource;
        }
        this.oApi._fnProcessingDisplay( oSettings, true );
        var that = this;
        var iStart = oSettings._iDisplayStart;
        var aData = [];
 
        this.oApi._fnServerParams( oSettings, aData );
     
        oSettings.fnServerData( oSettings.sAjaxSource, aData, function(json) {
            /* Clear the old information from the table */
            that.oApi._fnClearTable( oSettings );
         
            /* Got the data - add it to the table */
            var aData =  (oSettings.sAjaxDataProp !== "") ?
            that.oApi._fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ) : json;
         
            for ( var i=0 ; i<aData.length ; i++ )
            {
                that.oApi._fnAddData( oSettings, aData[i] );
            }
         
            oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
            that.fnDraw();
         
            if ( typeof bStandingRedraw == 'undefined' && bStandingRedraw != true )
            {
                oSettings._iDisplayStart = iStart;
                that.fnDraw( false );
            }
         
            that.oApi._fnProcessingDisplay( oSettings, false );
         
            /* Callback user function - for event handlers etc */
            if ( typeof fnCallback == 'function' && fnCallback != null )
            {
                fnCallback( oSettings );
            }
        }, oSettings );
    }

$(document).ready(function() {
    var oTable;
    
    oTable = $('#grid').dataTable( {
        "bPaginate": false,
        "bLengthChange": false,
        "bFilter": false,
        "bSort": false,
        "bInfo": false,
        "bAutoWidth": false,
        "sAjaxSource": 'ajax.php/json'
    } );
    
    var timer = setInterval( function () {
        oTable.fnReloadAjax();
    }, 30000 );
} );